﻿using System;

namespace _36_文件操作_FileInfo //Path 路径、目录
{
    class Program
    {
        static void Main(string[] args)
        {
            var test = new FileInfoTest();
            test.DoTest();
        }
    }

    // FileInfo : file 文件 ；info = in for ma tion，信息
    class FileInfoTest
    {
        public void DoTest()  // do 做 test 测试
        {
            string path = "D:/Study/4.txt";
            //1. 实例化一个文件操作对象
            // 参数 fileName 是 文件所在的路径字符串
            FileInfo fileInfo = new FileInfo(path);

            //2. 创建 4.txt 
            // create 创建
            fileInfo.Create();


            //3. 查询： 判断文件是否存在
            Console.WriteLine($"文件{(fileInfo.Exists ? "" : "不")}存在");

            //4. 查询： 获取文件大小
            path = "D:/Study/111.png";
            fileInfo = new FileInfo(path);
            //在代码中，描述尺寸有这些单词： Count（list） 、Lenght（数组）、capacity （list）、size 尺寸（sizeof 运算符）
            Console.WriteLine($"文件大小为{fileInfo.Length}"); // 7916

            // 5. 查询： 获取文件名称
            Console.WriteLine(fileInfo.Name);

            //6. 复制文件（会保留原有文件）
            path = "D:/Study/111.png";
            string copyto = "D:/Study/Folder1/222.png";
            fileInfo = new FileInfo(path);
            // copy 拷贝，复制 ，to 朝向 ，去向哪儿
            // copyto : 拷贝到
            // already exists: already 已经，exist 存在  
            // 如果文件已经存在则会抛出异常，需要 捕获它
            var file = fileInfo.CopyTo(copyto);

            //7.  删除一个文件
            // delete : 删除
            Console.WriteLine($"before: 222.png文件{(file.Exists ? "" : "不")}存在");
            file.Delete();
            Console.WriteLine($"after: 222.png文件{(file.Exists ? "" : "不")}存在");

            //8. 查询： 是否为只读
            var path01 = "D:/Study/3.txt";
            var path02 = "D:/Study/2.txt";
            var file1 = new FileInfo(path01);
            var file2 = new FileInfo(path02);

            Console.WriteLine($"{file1.Name} {(file1.IsReadOnly ? "是" : "不是")}只读");
            Console.WriteLine($"{file2.Name} {(file2.IsReadOnly ? "是" : "不是")}只读");

            //has :是否有
            // is  :是否   is 运算符 

            //9. 移动文件
            path = "D:/Study/111.png";
            var moveto = "D:/Study/Folder1/101.png";
            file = new FileInfo(path);
            // move 移动， to 到哪儿
            Console.WriteLine($"before: 文件{(file.Exists ? "" : "不")}存在 {file.Name} - {file.FullName}");
            // 如果文件存在，则会抛出文件已存在的异常， 可以 try catch 也可以覆盖
            //file.MoveTo(moveto);// 文件存在会抛异常
            // override : 重写 （方法重写的关键字）
            // overwrite: 覆盖，over 覆盖在xxx之上 wirte 写字（moveto 的一个参数）
            file.MoveTo(moveto,true);// 文件存在会抛异常
            Console.WriteLine($"after: 文件{(file.Exists ? "" : "不")}存在 {file.Name} - {file.FullName}");
            file.CopyTo(path);



        }
    }
}